GDB调试命令详解

您所在的位置:网站首页 逻辑错误最常用的调试方法有 三种 GDB调试命令详解

GDB调试命令详解

2024-07-07 14:14| 来源: 网络整理| 查看: 265

GDB是什么 调试程序

程序中出现的语法错误可以借助编译器解决;但逻辑错误则只能靠自己解决。实际场景中解决逻辑错误最高效的方法,就是借助调试工具对程序进行调试。

所谓调试(Debug),就是让代码一步一步慢慢执行,跟踪程序的运行过程。比如,可以让程序停在某个地方,查看当前所有变量的值,或者内存中的数据;也可以让程序一次只执行一条或者几条语句,看看程序到底执行了哪些代码。

也就是说,通过调试程序,我们可以监控程序执行的每一个细节,包括变量的值、函数的调用过程、内存中数据、线程的调度等,从而发现隐藏的错误或者低效的代码。

GDB的作用

GDB 全称“GNU symbolic debugger”,从名称上不难看出,它诞生于 GNU 计划(同时诞生的还有 GCC、Emacs 等),是 Linux 下常用的程序调试器。发展至今,GDB 已经迭代了诸多个版本,当下的 GDB 支持调试多种编程语言编写的程序,包括 C、C++、Go、Objective-C、OpenCL、Ada等。实际场景中,GDB 更常用来调试 C 和 C++程序。

总的来说,借助 GDB调试器可以实现以下几个功能:

程序启动时,可以按照我们自定义的要求运行程序,例如设置参数和环境变量;

可使被调试程序在指定代码处暂停运行,并查看当前程序的运行状态(例如当前变量的值,函数的执行结果等),即支持断点调试;

程序执行过程中,可以改变某个变量的值,还可以改变代码的执行顺序,从而尝试修改程序中出现的逻辑错误。

GDB安装

1、通过包管理器进行安装

$ yum -y install gdb

2、源码安装GDB

在gdb源码包上面下载相应的版本进行安装即可。

3、查看GDB版本

输入gdb -v,即可查看当前安装的gdb的版本。

$ gdb -v GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-94.el7 Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-redhat-linux-gnu". For bug reporting instructions, please see: .

如果显示出gdb的版本,也说明了安装成功。

GDB的用法 常用调试命令

GDB 的主要功能就是监控程序的执行流程。这也就意味着,只有当源程序文件编译为可执行文件并执行时,并且该文件中必须包含必要的调试信息(比如各行代码所在的行号、包含程序中所有变量名称的列表(又称为符号表)等),GDB才会派上用场。

所以在编译时需要使用 gcc/g++ -g 选项编译源文件,才可生成满足 GDB 要求的可执行文件

调试命令 (缩写)作用(gdb) break (b)在源代码指定的某一行设置断点,其中xxx用于指定具体打断点位置(gdb) run (r)执行被调试的程序,其会自动在第一个断点处暂停执行。(gdb) continue (c)当程序在某一断点处停止后,用该指令可以继续执行,直至遇到断点或者程序结束。(gdb) next (n)令程序一行代码一行代码的执行。(gdb) step(s)如果有调用函数,进入调用的函数内部;否则,和 next 命令的功能一样。(gdb) until (u) (gdb) until (u) location当你厌倦了在一个循环体内单步跟踪时,单纯使用 until 命令,可以运行程序直到退出循环体。until n 命令中,n 为某一行代码的行号,该命令会使程序运行至第 n 行代码处停止。(gdb) print (p)打印指定变量的值,其中 xxx 指的就是某一变量名。(gdb) list (l)显示源程序代码的内容,包括各行代码所在的行号。(gdb) finish(fi)结束当前正在执行的函数,并在跳出函数后暂停程序的执行。(gdb) return(return)结束当前调用函数并返回指定值,到上一层函数调用处停止程序执行。(gdb) jump(j)使程序从当前要执行的代码处,直接跳转到指定位置处继续执行后续的代码。(gdb) quit (q)终止调试。

示例:

$ ls main.cpp $ g++ -g -o test main.cpp $ ls main.cpp test $ gdb test


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3